
import pandas as pd
import matplotlib.pyplot as plt
import os

# 读取Excel文件
file_path = 'dataset/人口结构.xlsx'
df = pd.read_excel(file_path, sheet_name='Sheet1')

# 转换年份为日期格式（每年1月1日）
df['日期'] = pd.to_datetime(df['年份'], format='%Y')

# 保存原始年度数据到CSV
output_dir = 'dataset_csv'
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
output_file = os.path.join(output_dir, '人口结构年度数据.csv')
df.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f'年度数据已保存至: {output_file}')

# 可视化设置
# plt.style.use('seaborn')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 1. 城乡人口比例柱状图
plt.figure(figsize=(12, 6))
width = 200  # 柱状图宽度（天）
plt.bar(df['日期'], df['城镇人口比重'], width=width, label='城镇人口比重', color='#1f77b4')
plt.bar(df['日期'], df['乡村人口比重'], width=width, label='乡村人口比重', 
        bottom=df['城镇人口比重'], color='#ff7f0e')
plt.title('中国城乡人口比例变化 (2013-2024)', fontsize=14)
plt.xlabel('年份', fontsize=12)
plt.ylabel('人口比例', fontsize=12)
plt.xticks(df['日期'], df['年份'].astype(str), rotation=45)
plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.6)
plt.tight_layout()
plt.savefig(os.path.join(output_dir, '/Users/linshangjin/25CCM/NKU-C/数据图表/城乡人口比例.png'), dpi=300)
plt.close()

# 2. 年龄结构堆叠面积图
age_groups = ['0-15岁', '16-59岁', '60周岁及以上']
colors = ['#2ca02c', '#1f77b4', '#d62728']
plt.figure(figsize=(12, 6))
plt.stackplot(df['日期'], 
              df['0-15岁'], df['16-59岁'], df['60周岁及以上'],
              labels=age_groups, colors=colors, alpha=0.8)
plt.title('中国人口年龄结构变化 (2013-2024)', fontsize=14)
plt.xlabel('年份', fontsize=12)
plt.ylabel('人口比例', fontsize=12)
plt.xticks(df['日期'], df['年份'].astype(str), rotation=45)
plt.legend(loc='upper left')
plt.grid(axis='y', linestyle='--', alpha=0.6)
plt.tight_layout()
plt.savefig(os.path.join(output_dir, '/Users/linshangjin/25CCM/NKU-C/数据图表/年龄结构.png'), dpi=300)
plt.close()

# 3. 老龄化趋势折线图
plt.figure(figsize=(12, 6))
plt.plot(df['日期'], df['60周岁及以上'], marker='o', label='60岁及以上', color='#d62728', linewidth=2)
plt.plot(df['日期'], df['0-15岁'], marker='s', label='0-15岁', color='#2ca02c', linewidth=2)
plt.title('中国老龄化与少儿比例趋势 (2013-2024)', fontsize=14)
plt.xlabel('年份', fontsize=12)
plt.ylabel('人口比例', fontsize=12)
plt.xticks(df['日期'], df['年份'].astype(str), rotation=45)
plt.legend()
plt.grid(linestyle='--', alpha=0.6)
plt.tight_layout()
plt.savefig(os.path.join(output_dir, '/Users/linshangjin/25CCM/NKU-C/数据图表/老龄化趋势.png'), dpi=300)
plt.close()

print('数据处理与可视化完成！')